package com.example.campustalent.fragment

import android.R
import android.content.Intent
import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.fragment.app.Fragment
import com.example.campustalent.activity.MyContentActivity
import com.example.campustalent.activity.ReleaseActivity
import com.example.campustalent.bean.StudyInfo
import com.example.campustalent.bean.UserInfoBean
import com.example.campustalent.databinding.FragmentMeBinding
import com.example.campustalent.event.StudyEvent
import com.example.campustalent.event.TabEvent
import com.example.campustalent.utils.DbUtils
import com.example.campustalent.utils.SharedPreferencesUtils
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.luck.picture.lib.tools.ToastUtils
import org.greenrobot.eventbus.EventBus
import java.util.ArrayList


class MeFragment : Fragment() {
    private lateinit var binding: FragmentMeBinding
    private var mFirst: Boolean = false
    private var mName: String? = null
    private val lists: MutableList<String> = ArrayList()
    private lateinit var mListPop: ListPopupWindow
    private lateinit var preferencesUtils: SharedPreferencesUtils
    companion object {
        fun newInstance(isFirst: Boolean, name: String) = MeFragment().apply {
            arguments = Bundle().apply {
                putBoolean("isFirst", isFirst)
                putString("name", name)
            }

        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        preferencesUtils = SharedPreferencesUtils(activity)
        if (DbUtils.liteOrm == null) {
            DbUtils.createDb(requireActivity(), "CampusTalent")
        }
        mListPop = ListPopupWindow(requireActivity())
        lists.add("赣南师范大学")
        lists.add("江西理工大学")
        lists.add("赣南医学院")
        mName = arguments?.getString("name")
        binding.tvTitle.text = "账号：$mName"
        when(preferencesUtils.getParam("schoolPosition", "").toString()){
            "0" ->{
                binding.tvSchool.text = "我的学校(赣南师范大学)"
            }
            "1" ->{
                binding.tvSchool.text = "我的学校(江西理工大学)"
            }
            "2" ->{
                binding.tvSchool.text = "我的学校(赣南医学院)"
            }
        }

        binding.llMyWorksLayout.setOnClickListener {
            startActivity(Intent(activity, MyContentActivity::class.java))
        }
        binding.llMyBusinessLayout.setOnClickListener {
            ToastUtils.s(activity, "功能暂未开放")
        }
        binding.llSchoolLayout.setOnClickListener {
            setListPopupWindow(binding.llSchoolLayout, binding.tvSchool, mListPop, lists)
        }
        binding.llUploadLayout.setOnClickListener {
            startActivity(Intent(activity, ReleaseActivity::class.java))
        }

    }

    private fun setListPopupWindow(
        layout: LinearLayout,
        textView: TextView,
        mListPop: ListPopupWindow,
        list1: List<String>
    ) {
        mListPop.setAdapter(
            ArrayAdapter<String>(
                requireActivity(),
                R.layout.simple_expandable_list_item_1, list1
            )
        ) //适配，直接匿名内部类
        mListPop.width = ViewGroup.LayoutParams.WRAP_CONTENT //宽度
        mListPop.height = ViewGroup.LayoutParams.WRAP_CONTENT //高度
        mListPop.isModal = true //设置是否是模式
        mListPop.setDropDownGravity(Gravity.LEFT) //对齐模式，左对齐
        mListPop.anchorView = layout //设置ListPopupWindow的锚点，即关联PopupWindow的显示位置和这个锚点
        mListPop.setOnItemClickListener { parent: AdapterView<*>?, view: View?, position: Int, id: Long ->
          var tabList: MutableList<StudyInfo> = ArrayList()
            preferencesUtils.setParam("schoolPosition", position.toString())
            textView.text = "我的学校(${list1[position]})"
            var userInfoBean: UserInfoBean? = null
            when (position) {
                0 -> {
                    userInfoBean = DbUtils.getQueryByWhere(
                        UserInfoBean::class.java,
                        "name",
                        arrayOf(mName!!)
                    )[0]

                    userInfoBean.tabContentSF?.let {
                        val typeToken: TypeToken<List<StudyInfo>> =
                            object : TypeToken<List<StudyInfo>>() {
                            }
                        tabList = Gson().fromJson(it, typeToken.type)
                    }

                    if (!tabList.isNullOrEmpty() && tabList.size >= 4) {
                        EventBus.getDefault().post(TabEvent(position.toString()))
                        mListPop.dismiss()
                        return@setOnItemClickListener
                    }
                    //电子信息工程
                    val studyList: MutableList<StudyInfo.StudyDetailInfo> = ArrayList()
                    val studyDetailInfo = StudyInfo.StudyDetailInfo()
                    studyDetailInfo.title = "初识mos管"
                    studyDetailInfo.content = "功能作用：\n" +
                            "1.电子开关：通过电压控制电流的导通  \n" +
                            "2.电平转换：特定条件下MOS管的阻止可发生变化, 导致分压变化，在电路中达到电平转换效果。"
                    studyDetailInfo.imageUrl = "111"
                    studyList.add(studyDetailInfo)
                    val studyDetailInfo1 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo1.title = "什么是EMC"
                    studyDetailInfo1.content =
                        "EMC的含义：直译是“电磁兼容性”。意指设备所产生的电磁能量既不对其它设备产生干扰，也不受其他设备的电磁能量干扰的能力。EMC这个术语有其非常广的含义，与设计意图相反的电磁现象，都应看成是EMC问题。"
                    studyList.add(studyDetailInfo1)
                    setData("电子信息工程", position.toString(), studyList)

                    //人力资源管理
                    val studyList1: MutableList<StudyInfo.StudyDetailInfo> =
                        ArrayList()
                    val studyDetailInfo2 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo2.title = "现代企业管理中人力资源管理的重要性"
                    studyDetailInfo2.content =
                        "人力资源是指在企业中从事体力劳动或者是智力劳动的人，其能通过自己的劳动对企业的生存和发展进行影响。同时，人力资源也指一个地区或是一个国家能够推动经济和社会发展的全体劳动人员。\n" +
                                "1.1企业在发展过程中要想更好的开展人力资源管理工作，要应用比较科学和先进的管理措施，对人力以及财力进行合理分配，对实现企业更好发展非常有利。企业发展过程中对员工的思想要进行必要的控制，在发挥人的自主性的同时，要对员工的工作进行必要的协调，这样能够更好的推动企业发展。\n " +
                                "1.2合理配置人力资源。人力资源管理中，主要对管理职能中的任用职能进行研究，这就是企业员工的配置问题，企业人力资源管理中最基础的工作就是在清楚企业战略目标的情况下，对企业需要的人才进行招聘，同时，对每个员工在哪个岗位更加的适合进行分析，对企业未来的发展非常有利。企业发展过程中，外部环境在不断的变化过程中，因此，企业人力资源管理也要具有一定的灵活性人力资源的合理配置是一个非常动态的过程，具有一定的灵活性对企业发展而高能够更好的适应环境的变化。\n"  +
                                "1.3企业在发展过程中要对环境变化进行不断的适应，因此，企业对人力资源开发和管理要进行重视，对提高企业竞争能力以及经济效益都很有帮助。人力资源开发和管理对企业经济成败有着直接的影响，企业在发展过程中一定要对人力资源开发和管理问题进行重视。"
                    studyList1.add(studyDetailInfo2)
                    val studyDetailInfo3 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo3.title = "建立人力资源灵活酬薪制促进人力资源开发"
                    studyDetailInfo3.content =
                        "树立现代的酬薪管理理念,尽快从传统的分配制度转变到现代的酬薪管理。现代策略性人力资源管理的激才、留才机制依靠激励导向式的酬薪策略来吸引优秀人才。其特点是:第一,个人所拥有的人力资本的数量和质量决定其就业的起点、收入和方向;第二,保持企业核心竞争力的知识、管理型员工与其他员工的报酬将有显著的差距;第三,按个人能力、技能、绩效而不是按职务付酬。具体做法:一是引入现代企业管理制度,运用股金、期权等方式,鼓励管理人员和技术人员资金或自身人力资本入股,分享企业成长。二是按劳动、效率和资本来分配,制定符合本企业的灵活酬薪制度。"
                    studyList1.add(studyDetailInfo3)
                    setData("人力资源管理", position.toString(), studyList1)

                    //软件工程
                    val studyList2: MutableList<StudyInfo.StudyDetailInfo> =
                        ArrayList()
                    val studyDetailInfo4 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo4.title = "C语言指针"
                    studyDetailInfo4.content =
                        "指针是一个特殊的变量，它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容：指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。\n" +
                                "例如：\n" +
                                "1.(1)int*ptr; \n" +
                                "2.(2)char*ptr; \n" +
                                "3.(3)int**ptr; \n" +
                                "4.(4)int(*ptr)[3]; \n" +
                                "5.(5)int*(*ptr)[4];"
                    studyList2.add(studyDetailInfo4)
                    val studyDetailInfo5 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo5.title = "软件定义阶段"
                    studyDetailInfo5.content =
                        "(1) 问题定义：  通过对客户的访问调查，系统分析员扼 要地写出关于问题性质、工程目标和工程规模的书 面报告，经过讨论和必要的修改之后这份报告应该得到客户的确认。\n" +
                                "(2)可行性研究： 提交“可行性研究报告”，要回答“对于上 一个阶段所确定的问题有行得通的解决方法 吗？”\n" +
                                "(3)软件需求分析： 主要确定目标系统必须具备哪些功能，提交 “需求规格说明书”，描述软件的功能和性 能，确定软件设计的限制和软件与其他系统 元素的接口，定义软件的其他有效性需求。"
                    studyList1.add(studyDetailInfo5)
                    setData("软件工程", position.toString(), studyList2)

                    val studyList3: MutableList<StudyInfo.StudyDetailInfo> =
                        ArrayList()
                    val studyDetailInfo6 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo6.title = "商务英语课程定义"
                    studyDetailInfo6.content =
                        "商务英语（BUSINESS ENGLISH ）是以适应职场生活的语言要求为目的，内容涉及到商务活动的方方面面。商务英语课程不只是简单地对学员的英文水平、能力的提高，它更多地是向学员传授一种西方的企业管理理念、工作心理，甚至是如何和外国人打交道，如何和他们合作、工作的方式方法，以及他们的生活习惯等，从某种程度上说是包含在文化概念里的。"
                    studyList3.add(studyDetailInfo6)
                    val studyDetailInfo7 = StudyInfo.StudyDetailInfo()
                    studyDetailInfo7.title = "“商务”、“英语”、若即若离"
                    studyDetailInfo7.content =
                        "关于商务英语，不少人会有疑问，究竟是“商务中的英语”还是“商务加英语”，“商务”与“英语”两者内部到底是什么关系？确实纠缠不清！我们的汉语老师曾少波就说过：“从构词上看，‘商务英语’有点儿怪怪的－－为什么这样说呢？道理很简单，难道你也认可了‘商务汉语’？”相信大家学习语言的目的不会是为了研究吧？大部分人都是为了用这个语言工具去跟别人交流。商务英语的培训也一样，其核心在于沟通的培训。当今的商务活动强调人实际的商务沟通能力，能否用最准确、清晰的商务语言来与老板和客户进行沟通、交流在很大程度上决定你成功与否。当然，达到沟通的理想状态和以“商务”为核心的这样一个语言培训过程，商务英语的教师应该有扎实的英语功底和丰富的商业背景。只有具备语言、商业知识、商务技能的老师，在课堂上才能传授给学生商务英语方面的知识，更能辅之以大量的商务知识和商务技能的讲解，知识面涉及管理、贸易、法律、财会等显示商务活动，优秀的商务英语教师是“商务”的核心。语言水平是基本的要求。也就是说，我们首先解决的是学员的语言水平问题。帮助学员切实地提高英语水平。商务英语的课程在提高学员水平的基础上，进行商务方面的培训。其中包括今后工作中即将遇到的不同场景，如何和外国人合作、外国人工作的方式方法，以及他们的生活习惯等。"
                    studyList1.add(studyDetailInfo7)
                    setData("商务英语", position.toString(), studyList3)
                }
                1 -> {
                    userInfoBean = DbUtils.getQueryByWhere(
                        UserInfoBean::class.java,
                        "name",
                        arrayOf(mName!!)
                    )[0]
                    userInfoBean.tabContentLG?.let {
                        val typeToken: TypeToken<List<StudyInfo>> =
                            object : TypeToken<List<StudyInfo>>() {
                            }
                        tabList = Gson().fromJson(it, typeToken.type)
                    }

                    if (!tabList.isNullOrEmpty() && tabList.size >= 4) {
                        EventBus.getDefault().post(TabEvent(position.toString()))
                        mListPop.dismiss()
                        return@setOnItemClickListener
                    }
                    setData("冶金", position.toString(), null)
                    setData("稀土", position.toString(), null)
                    setData("通信工程", position.toString(), null)
                    setData("计算机技术", position.toString(), null)
                }
                2 -> {
                    userInfoBean = DbUtils.getQueryByWhere(
                        UserInfoBean::class.java,
                        "name",
                        arrayOf(mName!!)
                    )[0]
                    userInfoBean.tabContentYX?.let {
                        val typeToken: TypeToken<List<StudyInfo>> =
                            object : TypeToken<List<StudyInfo>>() {
                            }
                        tabList = Gson().fromJson(it, typeToken.type)
                    }

                    if (!tabList.isNullOrEmpty() && tabList.size >= 4) {
                        EventBus.getDefault().post(TabEvent(position.toString()))
                        mListPop.dismiss()
                        return@setOnItemClickListener
                    }
                    setData("临床医学", position.toString(), null)
                    setData("口腔医学", position.toString(), null)
                    setData("解剖专业", position.toString(), null)
                    setData("医用器械", position.toString(), null)
                }
            }
            EventBus.getDefault().post(TabEvent(position.toString()))
            mListPop.dismiss()
        }
        mListPop.show()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    private fun setData(
        tabName: String,
        school: String,
        list: List<StudyInfo.StudyDetailInfo>?
    ) {
        val userInfoBean =
            DbUtils.getQueryByWhere(UserInfoBean::class.java, "name", arrayOf(mName!!))[0]
        val newContentList: MutableList<StudyInfo> = ArrayList()
        //学校类型
        userInfoBean.schoolType = school
        when (school) {
            "0" -> {
                if (!userInfoBean.tabContentSF.isNullOrEmpty()) {
                    userInfoBean.tabContentSF.let {
                        val typeToken: TypeToken<List<StudyInfo>> =
                            object : TypeToken<List<StudyInfo>>() {
                            }
                        val listOld: List<StudyInfo> =
                            Gson().fromJson(it, typeToken.type)
                        if (listOld.size >= 4){
                            return
                        }
                        newContentList.addAll(listOld)
                    }
                }
                //学习信息 tab表
                val studyInfo = StudyInfo()
                studyInfo.tabName = tabName
                studyInfo.detail = list
                newContentList.add(studyInfo)
                userInfoBean.tabContentSF = Gson().toJson(newContentList)
                DbUtils.update(userInfoBean)
            }
            "1" -> {
                if (!userInfoBean.tabContentLG.isNullOrEmpty()) {
                    userInfoBean.tabContentLG.let {
                        val typeToken: TypeToken<List<StudyInfo>> =
                            object : TypeToken<List<StudyInfo>>() {
                            }
                        val listOld: List<StudyInfo> =
                            Gson().fromJson(it, typeToken.type)
                        if (listOld.size >= 4){
                            return
                        }
                        newContentList.addAll(listOld)
                    }
                }
                //学习信息 tab表
                val studyInfo = StudyInfo()
                studyInfo.tabName = tabName
                val list: List<StudyInfo.StudyDetailInfo> = ArrayList()
                studyInfo.detail = list
                newContentList.add(studyInfo)
                userInfoBean.tabContentLG = Gson().toJson(newContentList)
                DbUtils.update(userInfoBean)
            }
            "2" -> {
                if (!userInfoBean.tabContentYX.isNullOrEmpty()) {
                    userInfoBean.tabContentYX.let {
                        val typeToken: TypeToken<List<StudyInfo>> =
                            object : TypeToken<List<StudyInfo>>() {
                            }
                        val listOld: List<StudyInfo> =
                            Gson().fromJson(it, typeToken.type)
                        if (listOld.size >= 4){
                            return
                        }
                        newContentList.addAll(listOld)
                    }
                }
                //学习信息 tab表
                val studyInfo = StudyInfo()
                studyInfo.tabName = tabName
                val list: List<StudyInfo.StudyDetailInfo> = ArrayList()
                studyInfo.detail = list
                newContentList.add(studyInfo)
                userInfoBean.tabContentYX = Gson().toJson(newContentList)
                DbUtils.update(userInfoBean)
            }
        }

    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentMeBinding.inflate(inflater)
        return binding.root
    }
}